<em>(Unsupported content elided by the Agora.)</em>
This will paginate over our one dimensional `taxAndValues` collection that we are yet to make. Let's make it now.
First, lets make a list of the taxonomies we are using.
```js
const taxonomies = [
"tags",
"in"
}]
Assuming your taxonomies list is indeed just called taxonomies
, you can paste this code in without trouble
eleventyConfig.addCollection('taxAndValues',function(collectionApi) {
// lets make a variable to hold our taxonomies and values
let taxAndValues = []
// We need to get each post in our posts folder. In my case this is /c
const nodes = collectionApi.getFilteredByGlob('pages/c/*.md')
// next lets iterate over all the nodes
nodes.forEach(node => {
// and then iterate over the taxonomies
taxonomies.forEach(taxonomy => {
// I don't want to paginate date, for instance
// this is why my collectionControl is using objects instead of arrays
if (node?.data?.[taxonomy]) {
// this is typeof on drugs
switch(({}).toString.call(node.data[taxonomy]).match(/\s([a-zA-Z]+)/)[1].toLowerCase()) {
// if it is an array (for tags especially)
case 'array':
node.data[taxonomy].forEach(item =>
taxAndValues.push([taxonomy,item])
)
break
// otherwise
default: taxAndValues.push([taxonomy,node.data[taxonomy]])
}
}
})
});
// custom set, sets don't work with objects
const unique = [...new Set(taxAndValues.map(JSON.stringify))].map(JSON.parse)
return unique
})
Lets git commit! We are making great progress!
$ git commit --all -m "start working on taxonomies"
I would also like to take a moment to remember my English bulldog. Today, two years ago, she left us at the age of 14. She was a wonderful dog, and I feel so lucky to have lived those 14 years with her. May she snore forever in heaven.
::: details Bulldog picture :::
We are now generating these pages a proper way, but something is still missing. These pages don’t have content!
Let’s reopen taxValue.njk
, and add to the page
(Unsupported content elided by the Agora.)
<em>(Unsupported content elided by the Agora.)</em>
<ul>
<em>(Unsupported content elided by the Agora.)</em>
<li>
<a href="{{ post.url | url }}">{{ post.data.title }}</a>
</li>
<em>(Unsupported content elided by the Agora.)</em>
</ul>
(Unsupported content elided by the Agora.)
We will now largely copy and paste the same code that we did in the first collection
eleventyConfig.addCollection("nestedTax", function (collectionApi) {
let nestedTax = {};
const nodes = collectionApi.getFilteredByGlob("pages/c/*.md");
nodes.forEach(node => {
taxonomies.forEach(taxonomy => {
if (node?.data?.[taxonomy]) {
// if the taxonomy in the object does not yet exist
if (!nestedTax[taxonomy]) nestedTax[taxonomy] = {};
// like "computing" or "blog"
const taxValue = node.data[taxonomy]
switch ({}.toString.call(taxValue).match(/\s([a-zA-Z]+)/)[1].toLowerCase()) {
case "array": {
taxValue.forEach(item => {
// if the value in the object does not yet exist
if (!nestedTax[taxonomy][item]) nestedTax[taxonomy][item] = [];
// then add the entire page to it
nestedTax[taxonomy][item].push(node);
});
break;
}
default: {
// if the value in the object does not yet exist
if (!nestedTax[taxonomy][taxValue])
nestedTax[taxonomy][taxValue] = [];
// then add the entire page to it
nestedTax[taxonomy][taxValue].push(node);
}
}
}
})
});
return nestedTax;
});
I’m sorry for the complex code! If you have any suggestions to improve readability, please let me know!
All code on this page (text within <code>
html tags) is hereby released under the unlicense. Consider sending a small tip via librepay!
Rendering context...